package com.coszero.utils.device

import android.app.Activity
import android.graphics.Color
import android.os.Build
import android.view.View
import android.view.WindowManager

/**
 * Desc： 状态栏控制,可全屏或者变换状态栏颜色等操作
 *
 *
 *
 * @author ： xmqian
 * Email:xmqian93@163.com
 * Date: 2020/6/2 11:03
 * @version 1
 */
object StatusBarContralUtils {
    /**
     * 改变状态栏的颜色及图标颜色并使用状态栏空间进行布局
     * 设置透明状态栏（API21，5.0之后才能用）
     *
     * @param color 通知栏颜色，完全透明填 Color.TRANSPARENT 即可
     * @param isLightMode 是否为亮色模式（黑色字体，需要6.0 以后支持，否则显示无效）
     */
    fun changeStatusBarToFullscreen(activity: Activity, color: Int, isLightMode: Boolean) {
        //大于5.0才设置
        var color: Int = color
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //大于6.0 并且是亮色模式
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isLightMode) {
                activity.getWindow().getDecorView().setSystemUiVisibility(
                    (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
                )
            } else {
                activity.getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                )
            }
            //因为5.0不支持黑色字体模式，如果设置成透明色则字体回看不到，设置成半透明黑色
            if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && color == Color.TRANSPARENT) {
                color = Color.parseColor("#44000000")
            }
            activity.getWindow().setStatusBarColor(color)
        }
    }

    /**
     * 隐藏状态栏
     *
     * @param activity activity
     */
    fun hintStatusBar(activity: Activity) {
        val flag: Int = WindowManager.LayoutParams.FLAG_FULLSCREEN
        activity.getWindow().setFlags(flag, flag)
    }

    /**
     * 单修改状态栏颜色
     *
     * @param activity activity
     * @param color color
     */
    fun changeStatusBarColor(activity: Activity, color: Int) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.getWindow().setStatusBarColor(color)
        }
    }
}
